Dieser Algorithmus und der von Scroller_XYLimited sind sehr �hnlich. Der wichtigste Unterschied ist, da� die H�he der Bitmap nicht mehr von der Breite des Levels abh�ngt. Dennoch sollte man diesen Algorithmus nicht als die beste Wahl ansehen, weil er auch ein paar Nachteile hat.

Zus�tzlich zu der "normalen" Extrah�he von 2 * BLOCKH�HE brauchen wir hier nur eine zus�tzliche Pixelzeile. Die Gesamth�he der Bitmap betr�gt also 289 (256 + 16 * 2 + 1). Beim Scroller_XYLimited gab es an der unteren Grenze der Bitmap einen Bereich, der durch horizontales Scrollen in Anspruch genommen wird. Je breiter das Level, desto gr��er mu�te also auch dieser Bereich sein. Diesen Bereich gibt es auch hier, mit dem Unterschied, da� er stets nur eine Zeile hoch ist.

Wie kann das funktionieren? Ganz einfach. Wir schr�nken das horizontale Scrolling in der Bitmap (!) ein, so da� sich f�r videoposx nur Werte zwischen 0 und BITMAPBREITE - 1 ergeben. Wenn durch Scrolling videoposx eigentlich den Wert BITMAPBREITE erhalten m��te, dann setzen wir videoposx auf 0 und erh�hen als Ausgleich videoposy um eine Planeline (!). Wenn durch Scrolling videoposx eigentlich den Wert -1 erhalten m��te, dann setzen wir videoposx auf BITMAPBREITE - 1 und vermindern als Ausgleich videoposy um eine Planeline (!).

F�r videoposy m�ssen wir nat�rlich jetzt Planelines als Einheit verwenden. Auch sonst �ndert sich einiges am Quelltext. Beim Blitten der Bl�cke m�ssen wir manchmal den Blit in 2 Schritte aufteilen, weil videoposy von videoposx beeinflu�t wird. Beim Scroller_XYLimited m�ssen Bl�cke nie in 2 Schritten geblittet werden, nur BOBs. Au�erdem mu� durch Kontrolle und evtl. Anpassung der Blit-Ziel-Koordinaten daf�r gesorgt werden, daߠdie Block-Blits nur im normalen Bitmapbereich passieren, also nicht in der Extrazeile. Block-Blits passieren also nur im Bereich (0,0) - (BITMAPBREITE - 1, BITMAPH�HE - 1). BITMAPH�HE ist in unserem Fall �brigens 288 und nicht 289.

Ein paar Probleme gibt's auch beim Video-Splitting. Da dieses nicht im sichtbaren Bereich einer Rasterzeile m�glich ist, mu� die Extrazeile zu Hilfe genommen werden. Vom Bitmapanfang kopieren wir nach Beendigung aller Scroll-Routinen so viele Bytes in die Extrazeile, damit auch die unterste dargestellte (!) Zeile der Bitmap komplett hintereinander im Speicher steht. Auch die Berechnung der VIDEOSPLIT Plane Pointer ist ein wenig anders, weil videoposx nur Werte zwischen 0 und BITMAPBREITE - 1 hat, also nur eine Planeline 'umfa�t'. Deshalb mu� videoposy mit in die Berechnung einbezogen werden, damit die Adressen auf der richtigen Planeline liegen.

Beim Blitten von BOBs ist zu beachten, da� dies nach dem Spezial-Blit in die Extrazeile passieren mu�.

Verwenden sollten sie diesen Algorithmus nicht! Wenn sie auf seine positiven Eigenschaften nicht verzichten k�nnen, dann sollten Sie sich Scroller_XYUnlimited2 anschauen. Dort werden die Dinge zwar sehr �hnlich gel�st, aber mit weit weniger Nachteilen.